Skip to content

feat: show who you follow is live in a rail above the log - #1126

Open
ArtMin96 wants to merge 25 commits into
dev-null-sh:productionfrom
ArtMin96:feat/orbit-rail
Open

ArtMin96 wants to merge 25 commits into
dev-null-sh:productionfrom
ArtMin96:feat/orbit-rail

Conversation

@ArtMin96

@ArtMin96 ArtMin96 commented Oct 24, 2026 •

Copy link
Copy Markdown

Adds a rail above the log showing the people you follow who are live.

  • Hovering a ring shows their stream, latest commit and when it ends. Play runs the stream inline.
  • The live list takes 2 queries however many people are live, using a new partial index on users.live_ends_at, and sends only the fields the rail draws.
  • Reusable live components in components/live/ for future streaming features.
  • The lane-colored live ring replaces the red one everywhere. Rings pause while off screen.
  • Stream end times follow your timezone setting.
  • live now includes platform, ends_at and embed.
Rail, dark Rail, light
Card open, dark Card open, light
Playing inline Live ring in the feed
Mobile sheet Mobile rail

…e Orbit Rail

Extract the go-live Dialog and End stream into GoLiveDialog and useEndStream so the
profile menu and the rail's You slot share one implementation. The aside's Live now
list leaves log pages to the rail, shows when each stream ends, and uses LiveAvatar.
KNOWLEDGE_BASE, PRODUCT and DESIGN describe inline playback, Twitch, the live ring
and the Orbit Rail.
Live helpers, hover intent and SSR-safe live-until hooks, platform glyph,
LiveRing/LiveAvatar, StreamThumbnail/StreamPlayer with play-to-load embeds,
and LivePreviewCard. LiveStreamCard, LiveStreamTrigger and the generic
LiveStreamSheet now build on them, and the feed node, user preview and
profile header wear the rotating lane ring instead of the red one.
The live-now rail between the log tabs and the composer: you first, then the
people you follow who are live, with one floating stream card anchored to
whichever ring is open, a sheet on touch, and liveFollowing in the log poll.
Only people who are live have an end time, so a partial index keeps the
live list and the job that ends streams off the rest of the users table.
The live stream now says its platform, when it ends and the player it
plays inline with, which stays null when embeds are off. Live follows
come soonest ending first, up to 24 for the orbit rail, each with their
newest approved top-level commit, in two queries however many are live.
Guests no longer get the prop at all.
- The rail polls liveFollowing itself every 30s (paused in hidden tabs), so
  Trending, whose page poll never starts, stays current; the log page's poll
  no longer asks for it twice.
- The aside's Live now list shows the five streams ending soonest.
- One LIVE pill placement (LiveAvatarBadge) for LiveAvatar and the feed node,
  replacing LiveAvatarMarker; feed nodes draw LiveAvatar.
- LiveStreamCard and LivePreviewCard share usePlayingStream and
  WatchStreamButton; StreamThumbnail is private to the player.
- The card's bloom and the rail's lane pulse share useMountAnimations.
- Thumbnails load eagerly: a lazy image inside the bloom's clipped start
  stayed unloaded.
- Card copy no longer splits "ends in 10h 49m", and the handle truncates
  before the name.
The graph canvas cut only each node's circle out of its lines, so the
segment below a live author ran over the pill hanging off the ring. Nodes
can now mark extra cut-outs with data-graph-cutout.
At 520px the 200px thumbnail left the details column 280px, 6px short of
Watch on YouTube and View profile side by side (286px), so View profile
wrapped. A 184px thumbnail leaves 296px; the buttons keep their sizes.
The rail only ever shows people you follow, so "Live now · N you follow"
said nothing the rings don't. The row gives the avatars the full width and
keeps its accessible name as an aria-label.
With the count gone the scroller already spans the row, so drop the
one-child flex wrapper, apply the fade mask only while something overflows,
and run the lane line from the first ring's centre to the last instead of
past both ends.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant